﻿using System;
using System.ServiceModel;
using System.Collections.Generic;
using System.Security.Permissions;
using Bovespa.Infra.Services;
using Bovespa.Infra.Services.Transactions;
using Bovespa.Infra.Services.Security;
using Bovespa.Infra.Logging.Audit;
using Bovespa.Infra.ExceptionHandling;

namespace Bovespa.Sinacor.Servico.BaseConhecimento.Versao.Servicos.Contratos
{
	/// <summary>
	/// Contrato de servico "IVersao".
	/// </summary>
	[ExceptionShielding]
    [Authentication]
	[ServiceContract(Namespace = "http://www.bovespa.com.br/Versao/ServiceContracts/2010/08", Name = "IVersao", SessionMode = SessionMode.Allowed)]
	public interface IVersao
	{
    /// <summary>
    /// Recupera uma lista de entidades de negocio "Versao".
    /// </summary>
	[FaultContract(typeof(GeneralFault))]
    [FaultContract(typeof(BusinessFault))]
	[SuppressTransactions]
	[OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ConsultarVersao")]
	List<Bovespa.Sinacor.Servico.BaseConhecimento.Versao.Servicos.Contratos.Versao> ConsultarVersao();

    /// <summary>
    /// Recupera uma entidade de negocio "Versao".
    /// </summary>
    [FaultContract(typeof(GeneralFault))]
    [FaultContract(typeof(BusinessFault))]
    [SuppressTransactions]
    [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ObterVersao")]
    Bovespa.Sinacor.Servico.BaseConhecimento.Versao.Servicos.Contratos.Versao ObterVersao(int codigoProduto, int codigoVersao);

    /// <summary>
    /// Recupera uma lista de entidades de negocio "Versao" Por Produto.
    /// </summary>
    [FaultContract(typeof(GeneralFault))]
    [FaultContract(typeof(BusinessFault))]
    [SuppressTransactions]
    [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ConsultarVersaoPorProduto")]
    List<Bovespa.Sinacor.Servico.BaseConhecimento.Versao.Servicos.Contratos.Versao> ConsultarVersaoPorProduto(int codigoProduto);

    /// <summary>
    /// Persiste uma entidade de negocio "Versao".
    /// </summary>
	[FaultContract(typeof(GeneralFault))]
    [FaultContract(typeof(BusinessFault))]
	[SuppressTransactions]
	[OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "InserirVersao")]
	void InserirVersao(Bovespa.Sinacor.Servico.BaseConhecimento.Versao.Servicos.Contratos.Versao entrada);

    /// <summary>
    /// Remove uma entidade de negocio "Versao".
    /// </summary>
	[FaultContract(typeof(GeneralFault))]
	[FaultContract(typeof(BusinessFault))]
	[SuppressTransactions]
	[OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExcluirVersao")]
    void ExcluirVersao(int codigoProduto, int codigoVersao);

    /// <summary>
    /// Atualiza uma entidade de negocio "Versao".
    /// </summary>
	[FaultContract(typeof(GeneralFault))]
	[FaultContract(typeof(BusinessFault))]
	[SuppressTransactions]
	[OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "AtualizarVersao")]
	void AtualizarVersao(Bovespa.Sinacor.Servico.BaseConhecimento.Versao.Servicos.Contratos.Versao entrada);

	}
}
